package com.beiben.project.mapper;

import com.beiben.project.domain.Project;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 项目管理Mapper接口
 *
 * @author 熊国强
 * @date 2020-12-03
 */
public interface ProjectMapper {
    /**
     * 查询项目管理
     *
     * @param projectId 项目管理ID
     * @return 项目管理
     */
    public Project selectProjectById(Long projectId);

    /**
     * 查询项目管理
     *
     * @param parentId 根据父ID查询自己
     * @return 项目管理
     */
    public List<Project> selectProjectByParentId(Long parentId);

    /**
     * 查询项目管理列表
     *
     * @param project 项目管理
     * @return 项目管理集合
     */
    public List<Project> selectProjectList(Project project);

    /**
     * 新增项目管理
     *
     * @param project 项目管理
     * @return 结果
     */
    public int insertProject(Project project);

    /**
     * 修改项目管理
     *
     * @param project 项目管理
     * @return 结果
     */
    public int updateProject(Project project);

    /**
     * 删除项目管理
     *
     * @param projectId 项目管理ID
     * @return 结果
     */
    public int deleteProjectById(Long projectId);

    /**
     * 批量删除项目管理
     *
     * @param projectIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteProjectByIds(Long[] projectIds);

    /**
     * 根据ID查询所有子节点
     *
     * @param projectId 项目管理ID
     * @return 项目列表
     */
    public List<Project> selectChildrenProjectById(Long projectId);

    /**
     * 根据ID查询所有子节点
     *
     * @param projectId 项目管理ID
     * @return 项目列表
     */
    public List<Project> selectChildrenProjectByIdDoing(Long projectId);

    /**
     * 查询项目管理列表
     *
     * @param parentId 父节点ID
     * @return 项目管理集合
     */
    public List<Project> selectProjectListByParentIdDoning(Long parentId);

    /**
     * 修改子元素关系
     *
     * @param projects 子元素
     * @return 结果
     */
    public int updateProjectChildren(@Param("projects") List<Project> projects);

    /**
     * 修改超时
     *
     * @param projectId
     */
    void updateTimeOutById(List<Long> projectId);

    /**
     * 根据项目id 修改项目状态
     *
     * @param projectIds
     * @param state
     * @return
     */
    int finishedFileProcessUserByIds(@Param("projectIds") Long[] projectIds, @Param("realFinishTime") Date realFinishTime, @Param("state") String state);

    /**
     * 根据projectId 查询 项目信息
     *
     * @param projectIds
     * @return
     */
    List<Project> selectProjectManagerIds(Long[] projectIds);

}
